package net.kmtarena.util;

import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
/**
 * 邮件处理服务
 * @author Funnyking
 * funnyking@139.com by 2012-10-31
 */
public class SendMail {
	/**
	 * smtp服务器设置
	 */
	private String host = "smtp.163.com";
	/**
	 *  邮箱用户名
	 */
	private String user = "lovejiaqiangsheng@163.com"; 
	/**
	 * 邮箱密码
	 */
	private String pwd = "jia@qs"; 
	/**
	 * 发件人邮箱地址
	 */
	private String from = "lovejiaqiangsheng@163.com"; 
	/**
	 * 收件人地址
	 */
	private String to = ""; 
	/**
	 * 邮件标题
	 */
	private String subject = ""; 
	/**
	 * 发邮件昵称
	 */
	private String nickname = "达内教学系统";
	
	/**
	 * 带昵称的参数设置
	 * @param to 收件人
	 * @param subject 主题
	 * @param nickname 昵称
	 */
	public void setAddress(String to, String subject, String nickname) {
		this.to = "";
		this.subject = subject;
		this.nickname = nickname;
	}

	/**
	 * 不带昵称的参数设置
	 * @param to 收件人
	 * @param subject 主题
	 */
	public void setAddress(String to, String subject) {
		this.to = to;
		this.subject = subject;
	}
	
	/**
	 * 发送邮件方法
	 * @param txt 邮件内容
	 */
	public void send(String txt) {
		System.out.println(txt);
		//TODO 先暂时屏蔽邮件发送功能
//		Properties props = new Properties();
//		// 设置发送邮件的邮件服务器的属性（这里使用网易的smtp服务器）
//		props.put("mail.smtp.host", host);
//		// 需要经过授权，也就是有户名和密码的校验，这样才能通过验证（一定要有这一条）
//		props.put("mail.smtp.auth", "true");
//		// 用刚刚设置好的props对象构建一个session
//		Session session = Session.getDefaultInstance(props);
//		// 有了这句便可以在发送邮件的过程中在console处显示过程信息，供调试使
//		// 用（你可以在控制台（console)上看到发送邮件的过程）
//		session.setDebug(true);
//		// 用session为参数定义消息对象
//		MimeMessage message = new MimeMessage(session);
//		String nick = null;
//		try {
//
//			// 加载发件人地址
//			message.setFrom(new InternetAddress(from));
//			// 加载发件人昵称
//			nick = javax.mail.internet.MimeUtility.encodeText(nickname);
//			message.setFrom(new InternetAddress(nick + " <" + from + ">"));
//			// 加载收件人地址
//			message.addRecipient(Message.RecipientType.TO, new InternetAddress(
//					to));
//			// 加载标题
//			message.setSubject(subject);
//			// 向multipart对象中添加邮件的各个部分内容，包括文本内容和附件
//			Multipart multipart = new MimeMultipart();
//
//			// 设置邮件的文本内容
//			BodyPart contentPart = new MimeBodyPart();
//			contentPart.setText(txt);
//			multipart.addBodyPart(contentPart);
//
//			// 添加附件
//			// BodyPart messageBodyPart = new MimeBodyPart();
//			// DataSource source = new FileDataSource(affix);
//			// 添加附件的内容
//			// messageBodyPart.setDataHandler(new DataHandler(source));
//			// 添加附件的标题
//			// 这里很重要，通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
//			// sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
//			// messageBodyPart.setFileName("=?GBK?B?"+
//			// enc.encode(affixName.getBytes()) + "?=");
//			// multipart.addBodyPart(messageBodyPart);
//
//			// 将multipart对象放到message中
//			message.setContent(multipart);
//			// 保存邮件
//			message.saveChanges();
//			// 发送邮件
//			Transport transport = session.getTransport("smtp");
//			// 连接服务器的邮箱
//			transport.connect(host, user, pwd);
//			// 把邮件发送出去
//			transport.sendMessage(message, message.getAllRecipients());
//			transport.close();
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
	}

	/**
	 * 发邮件给网站管理员，报告系统错误
	 * 
	 * @param title 邮件标题
	 * @param txt 邮件内容
	 */
	public void sendAdminMail(String title, String txt) {
		SendMail cn = new SendMail();
		// 设置发件人地址、收件人地址和邮件标题
		cn.setAddress("funnyking@139.com", "【达内教学平台】"+title);
		cn.send(txt);
	}
	/**
	 * ResultSet关闭异常
	 * @param txt 邮件内容
	 */
	public void sendAdminRs(String txt){
		SendMail cn = new SendMail();
		// 设置发件人地址、收件人地址和邮件标题
		cn.setAddress("funnyking@139.com", "【达内教学平台】ResultSet关闭异常");
		cn.send(txt);
	}
	/**
	 * PrepareStatement关闭异常
	 * @param txt 邮件内容
	 */
	public void sendAdminPs(String txt){
		SendMail cn = new SendMail();
		// 设置发件人地址、收件人地址和邮件标题
		cn.setAddress("funnyking@139.com", "【达内教学平台】PrepareStatement关闭异常");
		cn.send(txt);
	}
	/**
	 * Connection关闭异常
	 * @param txt 邮件内容
	 */
	public void sendAdminConn(String txt){
		SendMail cn = new SendMail();
		// 设置发件人地址、收件人地址和邮件标题
		cn.setAddress("funnyking@139.com", "【达内教学平台】Connection关闭异常");
		cn.send(txt);
	}
	
	/**
	 * 测试邮箱地址是否正确
	 * @param email
	 * @return boolean true表示正确 false表示不正确
	 */
	public boolean isMailFalse(String email) {
		boolean tag = true;
		if (!email.equals(null)) {
			final String pattern1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
			final Pattern pattern = Pattern.compile(pattern1);
			final Matcher mat = pattern.matcher(email);
			if (!mat.find()) {
				tag = false;
			}
		}
		return tag;
	}

	/**
	 * 测试方法
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		SendMail cn = new SendMail();
		// 设置发件人地址、收件人地址和邮件标题
		cn.setAddress("wangwenyun@tarena.com.cn", "【昆明教学平台】测试邮件，请勿回复");
		cn.send("我姓程，我是程序员！ 这是系统自动发送的测试邮件，请勿回复！");
	}
}
